home *** CD-ROM | disk | FTP | other *** search
/ Workbench Add-On / Workbench Add-On - Volume 1.iso / BBS-Archive / Comm / AmiTCP30b2.lha / src / util / ls / user.c < prev   
C/C++ Source or Header  |  1994-02-24  |  2KB  |  119 lines

  1. RCS_ID_C "$Id: user.c,v 1.2 1994/01/21 13:20:10 ppessi Exp $";
  2. /*
  3.  * user.c
  4.  *
  5.  * Get group and user names for their ids
  6.  *
  7.  * Author: ppessi <Pekka.Pessi@hut.fi>
  8.  *
  9.  * Copyright (c) 1993 Pekka Pessi
  10.  *
  11.  * Created      : Wed May 26 09:21:59 1993 ppessi
  12.  * Last modified: Fri Jan 21 00:32:44 1994 ppessi
  13.  *
  14.  */
  15.  
  16. #include <exec/lists.h>
  17. #include <exec/nodes.h>
  18. #include <dos/var.h>
  19.  
  20. #if __SASC
  21. #include <proto/exec.h>
  22. #include <proto/dos.h>
  23. #include <proto/usergroup.h>
  24. #else
  25. #error Unsupported Compiler.
  26. #endif
  27.  
  28. #include <pwd.h>
  29. #include <grp.h>
  30.  
  31. #include <stdlib.h>
  32. #include <string.h>
  33.  
  34. static char *wtoa(uid_t u);
  35.  
  36. /*
  37.  * user
  38.  *      Return user login for given uid. 
  39.  *      Return also group ID if specified.
  40.  *      Names have space filled up to 8 chars.
  41.  *      Use a cache of 1 user
  42.  */
  43. UBYTE *
  44. user(UWORD mu_uid)
  45. {
  46.   static UBYTE retval[9];        /* buffer to trash */
  47.   static struct passwd *user = NULL;
  48.   uid_t uid = MU2UG(mu_uid);
  49.  
  50.   /* Same as last one? */
  51.   if (user && user->pw_uid == uid) {
  52.     return retval;
  53.   }
  54.  
  55.   if (user = getpwuid(uid)) {
  56.     int i;
  57.     for (i = 0; i < 8 && (retval[i] = user->pw_name[i]); i++)
  58.       ;
  59.     for (; i < 8; retval[i++] = ' ')
  60.       ;
  61.     retval[8] = '\0';
  62.   } else {
  63.     strcpy(retval, wtoa(uid));
  64.   }
  65.  
  66.   return retval;
  67. }
  68.  
  69. UBYTE * 
  70. group(UWORD mu_gid)
  71. {
  72.   static UBYTE retval[9];        
  73.   static struct group *group = NULL;
  74.   gid_t gid = MU2UG(mu_gid);
  75.  
  76.   /* Same as last one? */
  77.   if (group && group->gr_gid == gid) {
  78.     return retval;
  79.   }
  80.  
  81.   if (group = getgrgid(gid)) {
  82.     int i;
  83.     for (i = 0; i < 8 && (retval[i] = group->gr_name[i]); i++)
  84.       ;
  85.     for (; i < 8; retval[i++] = ' ')
  86.       ;
  87.     retval[8] = '\0';
  88.   } else {
  89.     strcpy(retval, wtoa(gid));
  90.   }
  91.  
  92.   return retval;
  93. }
  94.  
  95. /* 
  96.  * wtoa
  97.  */
  98. static char *wtoa(uid_t id)
  99. {
  100.   UWORD w = id;
  101.   short i; 
  102.   static char b[9];
  103.  
  104.   b[5] = '\0';
  105.   b[4] = w % 10 + '0'; w /= 10;
  106.   b[3] = w % 10 + '0'; w /= 10;
  107.   b[2] = w % 10 + '0'; w /= 10;
  108.   b[1] = w % 10 + '0'; w /= 10;
  109.   b[0] = w + '0';
  110.  
  111.   for (i = 0; b[i] == '0'; i++)
  112.     ;
  113.   if (b[i] == '\0')
  114.     i--;
  115.  
  116.   return b + i;
  117. }
  118.  
  119.